package com.itcam.iostream_;


import java.io.*;

/**
 * Author:Cammy.Wu
 * Date:2024-05-13
 * Description:
 */

public class CharStreamDemo04 {
    public static void main(String[] args) throws IOException {
        // 1.创建文件
        File fo = new File("e:\\IOstream\\Output.txt");

        // 2.目标文件
        File fi = new File("e:\\IOstream\\Input.txt");

        // 3.搞一个输入管对到源文件上
        FileReader fr = null;

        // 4.搞一个输出管对到源文件上
        FileWriter fw = null;

        // 5.开始动作
        // 方式一：一个字符一个字符的复制
//        int read = fr.read();
//        while (read!=-1){
//            fw.write(read);
//            read=fr.read();
//        }

        // 方式二：利用缓冲字符数组
//        char[] chars = new char[5];
//        int len = fr.read(chars);
//        while (len != -1) {
//            fw.write(chars, 0, len);
//            len = fr.read(chars);
//        }

        // 方式三：利用字符串接受字符数组
        try {
            fr = new FileReader(fo);
            fw = new FileWriter(fi);

            char[] chars = new char[5];
            int len = fr.read(chars);
            while (len != -1) {
                String str = new String(chars, 0, len);
                fw.write(str);
                len = fr.read(chars);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 6.关闭流(后用先关闭) == 类似AOP面向切面编程 == 相当于栈(后进先出)
            try {
                if (fw != null) { // 防止空指针
                    fw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (fr != null) { // 防止空指针
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}
